﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PServiceBus.Core.Interface {
    /// <summary>
    /// Interface for implementing how configuration of service bus would be handled
    /// </summary>
    public interface IConfiguration {
        /// <summary>
        /// Gets the service bus config.
        /// </summary>
        /// <value>The service bus config.</value>
        IServiceBusConfig ServiceBusConfig { get; }
        /// <summary>
        /// Gets the logger config.
        /// </summary>
        /// <value>The logger config.</value>
        ILoggerConfig LoggerConfig { get; }
        /// <summary>
        /// Gets the component container config.
        /// </summary>
        /// <value>The component container config.</value>
        IComponentContainerConfig ComponentContainerConfig { get; }
        /// <summary>
        /// Gets the component config.
        /// </summary>
        /// <value>The component config.</value>
        IComponentConfig ComponentConfig { get; }
        /// <summary>
        /// Gets the distributor config.
        /// </summary>
        /// <value>The distributor config.</value>
        IDistributorConfig DistributorConfig { get; }
        /// <summary>
        /// Collection of message store to use for logging message history
        /// </summary>
        IList<IMessageStoreConfig> MessageStoreConfigs { get; }
        /// <summary>
        /// Collection of subscription managers
        /// </summary>
        IList<ISubscriptionManagerConfig> SubscriptionConfigs { get; }
        /// <summary>
        /// Security configuration
        /// </summary>
        ISecurityConfig SecurityConfig { get; }
        /// <summary>
        /// Collection of observers
        /// </summary>
        IList<IObserverConfig> ObserverConfigs { get; }
        /// <summary>
        /// Collection of topic enrichers
        /// </summary>
        IList<ITopicMessageEnricherConfig> TopicEnricherConfigs { get; }
        /// <summary>
        /// Collection of topic message inspectors
        /// </summary>
        IList<ITopicMessageInspectorConfig> TopicMessageInspectorConfigs { get; }

        IList<IWebStreamManagementConfig> WebStreamManagementConfigs { get; }
    }
}
